home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok32.lha
/
TestBild
/
txt
/
TestBild.mod
< prev
next >
Wrap
Text File
|
1993-08-15
|
6KB
|
208 lines
(*--------------------------------------------------------------------------
:Program. Testbild.mod
:Author. Andreas Lüdtke
:Address. Stangestraße 11, D 2000 Hamburg 50
:Phone. 040/3905153
:History. V1.0, 01-Jan-90, Andreas Lüdtke
:Copyright. PD © Andreas Lüdtke 1990.
:Language. Modula-2
:Translator. M2Amiga 3.3d
:Imports. Menu,Screen,Muster von A.Lüdtke
:Contents. Hauptmodul Testbild
---------------------------------------------------------------------------*)
MODULE Testbild;
FROM Arts IMPORT TermProcedure;
FROM Exec IMPORT WaitPort, ReplyMsg, GetMsg;
FROM SYSTEM IMPORT ADR, ADDRESS;
FROM Graphics IMPORT RastPortPtr, SetAPen, SetBPen, SetRast, jam1,
jam2, SetDrMd;
FROM Intuition IMPORT IntuiMessagePtr, IDCMPFlags,
menuNull, IDCMPFlagSet, ScreenPtr, WindowPtr, CloseScreen, NewScreen,
CloseWindow, NewWindow, IntuiTextPtr, IntuiText, OpenWindow,
SetWindowTitles, WindowFlags, WindowFlagSet, OpenScreen,
ScreenToFront, ShowTitle;
FROM Menu IMPORT SetMenu, MenuNum, ItemNum, XStufe, YStufe;
FROM Screen IMPORT Hoehe, Breite, InitText, OpenScreenAndWindow,
CloseScreenAndWindow;
FROM Muster IMPORT ChangeColors, InvertLineColors, DrawLines,
DrawPixel, DrawSquares, DrawSteps, DrawRects, DrawCircles, DrawPicture;
TYPE
PatternTyp = (Linien, Punkte, Rechtecke, Kreise, Quadrate, GrauStufen,
FarbStufen, TestBild);
VAR
wp : WindowPtr;
rp : RastPortPtr;
sp : ScreenPtr;
Ende : BOOLEAN;
MsgPtr : IntuiMessagePtr;
code : CARDINAL;
class : IDCMPFlagSet;
TitelAn : BOOLEAN;
Pattern : PatternTyp;
oldPattern : PatternTyp;
interlace : BOOLEAN;
invers : BOOLEAN;
oldXStufe : CARDINAL;
oldYStufe : CARDINAL;
PROCEDURE DoIt;
BEGIN
InvertLineColors( ADR(sp^.viewPort), invers);
CASE Pattern OF
| Linien : DrawLines ( rp, XStufe, YStufe);
| Punkte : DrawPixel ( rp, XStufe, YStufe);
| Rechtecke : DrawRects ( rp, XStufe, YStufe);
| Kreise : DrawCircles ( rp, XStufe);
| Quadrate : DrawSquares ( rp, XStufe, YStufe);
| GrauStufen : ChangeColors( ADR(sp^.viewPort), TRUE);
DrawSteps ( rp);
| FarbStufen : ChangeColors( ADR(sp^.viewPort), FALSE);
DrawSteps ( rp);
| TestBild : ChangeColors( ADR(sp^.viewPort), FALSE);
DrawPicture ( rp);
END;
END DoIt;
PROCEDURE closeall;
BEGIN
CloseScreenAndWindow( sp, wp);
END closeall;
(********************* Haupt-Initialisierungsroutine **********************)
PROCEDURE initall;
BEGIN
TermProcedure( closeall);
interlace := FALSE;
TitelAn := FALSE;
Ende := FALSE;
invers := FALSE;
Pattern := TestBild;
oldPattern := Pattern;
oldXStufe := XStufe;
oldYStufe := YStufe;
OpenScreenAndWindow( sp, wp, interlace);
SetMenu( wp);
rp := wp^.rPort;
SetRast( rp, 0);
ShowTitle( sp, TitelAn);
DoIt;
END initall;
(* Serviceroutine für aktiviertes Menü *)
PROCEDURE ServeMenus;
VAR
menu : CARDINAL;
item : CARDINAL;
BEGIN
menu := MenuNum( code);
item := ItemNum( code);
CASE menu OF
| 0: (* Projekt *)
CASE item OF
| 0: TitelAn := NOT TitelAn;
ShowTitle( sp, TitelAn);
| 1: interlace := NOT interlace;
CloseScreenAndWindow( sp, wp);
OpenScreenAndWindow( sp, wp, interlace);
SetMenu( wp);
ShowTitle( sp, TitelAn);
rp := wp^.rPort;
SetRast( rp, 0);
SetAPen( rp, 0);
SetBPen( rp, 10);
SetDrMd( rp, jam1);
ScreenToFront(sp);
DoIt;
| 2: Ende := TRUE;
END;
| 1: (* Muster *)
CASE item OF
| 0: invers := NOT invers; (* inverse Farben *)
InvertLineColors( ADR(sp^.viewPort), invers);
| 1: Pattern := Linien; (* Linienmuster *)
| 2: Pattern := Punkte; (* Punktemuster *)
| 3: Pattern := Rechtecke; (* Rechtecke *)
| 4: Pattern := Kreise; (* Kreise *)
| 5: Pattern := GrauStufen; (* Grautreppe *)
| 6: Pattern := FarbStufen; (* Farbtreppe *)
| 7: Pattern := Quadrate; (* Schachbrett *)
| 8: Pattern := TestBild; (* Testbild *)
END;
| 2: (* X-Auflösung *)
CASE item OF
| 0: XStufe := 2;
| 1: XStufe := 4;
| 2: XStufe := 8;
| 3: XStufe := 16;
| 4: XStufe := 32;
| 5: XStufe := 64;
| 6: XStufe := 128;
END;
| 3: (* Y-Auflösung *)
CASE item OF
| 0: YStufe := 2;
| 1: YStufe := 4;
| 2: YStufe := 8;
| 3: YStufe := 16;
| 4: YStufe := 32;
| 5: YStufe := 64;
| 6: YStufe := 128;
END;
END;
IF oldPattern#Pattern THEN
DoIt;
END;
IF (oldXStufe#XStufe) OR (oldYStufe#YStufe) THEN
CASE Pattern OF
| Linien : DrawLines ( rp, XStufe, YStufe);
| Punkte : DrawPixel ( rp, XStufe, YStufe);
| Rechtecke : DrawRects ( rp, XStufe, YStufe);
| Kreise : DrawCircles( rp, XStufe);
| Quadrate : DrawSquares( rp, XStufe, YStufe);
ELSE
;
END;
END;
oldXStufe := XStufe;
oldYStufe := YStufe;
oldPattern:= Pattern;
END ServeMenus;
(* Serviceroutine für evtl. aktivierte Gadgets und Menüs *)
PROCEDURE Server;
BEGIN
LOOP
MsgPtr := GetMsg(wp^.userPort); (* Message holen *)
IF (MsgPtr = NIL) THEN EXIT END;
(* Wenn Message da, dann reagieren... *)
class := MsgPtr^.class; code := MsgPtr^.code;
ReplyMsg( MsgPtr);
IF ((class = IDCMPFlagSet{ menuPick}) & (code#menuNull)) THEN
ServeMenus;
END;
END;
END Server;
(************* Hauptprogramm ******************)
BEGIN
initall;
ScreenToFront(sp);
REPEAT
WaitPort( wp^.userPort); (* Warten bis irgendeine Message kommt *)
Server;
UNTIL Ende;
END Testbild.mod